import java.util.*;

public class binary_tree_zigzag_level_order_traversal {
    //加一层奇偶判断,双端队列，
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> ans= new LinkedList<>();
        Queue<TreeNode> queue=new LinkedList<>();
        if (root != null) {
            queue.add(root);
        }
        //奇偶判断
        boolean isLeft= true;
        while(!queue.isEmpty()){
            int n=queue.size();
            Deque<Integer> level=new LinkedList<>();
            for(int i=0;i<n;i++){
                TreeNode node= queue.poll();
                if(isLeft){
                    //加在队尾，先进先出。
                    level.addLast(node.val);
                }else {
                    //加在队头，先进后出
                    level.addFirst(node.val);
                }
                if(node.left!=null) queue.add(node.left);
                if(node.right!=null) queue.add(node.right);
            }
            ans.add(new LinkedList<>(level));
            isLeft=!isLeft;
        }
        return ans;
    }
}
